//移动零
//给定一个数组,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序
//必须在不复制数组的情况下原地对数组进行操作

//算法原理分析
//数组划分/数组分块 --> 解决问题方法: 双指针
//利用数组下标来充当指针
//两个指针 cur(当前节点) dest(目标节点) 作用: cur:从左往右扫描数组,遍历数组   dest:已处理的区间内,非零元素的最后一个位置
//dest之前就是处理完的非 0 元素,dest 和 cur 之间就是处理出来的 0 元素,cur 之后的元素就是待处理元素  --> 划分成为三个区间

import java.util.Scanner;

//实现:
//cur 从前往后:
//1.遇到 0 元素,cur++
//2.遇到非 0 元素: 然后交换cur和dest下一个位置的元素,最后dest++,cur++
public class test1 {
    //自写
    //部分改动:dest一开始就是在数组的头部,当cur遇到非零元素之后,交换,dest++,cur++,就不去交换cur和dest-1,以免出现越界
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int count = in.nextInt();//元素个数
        int[] nums = new int[count];
        for (int i = 0; i < count; i++) {
            nums[i] = in.nextInt();
        }
        getResult(nums);
    }
    public static void getResult(int[] nums){
        int dest = 0;
        for (int cur = 0; cur < nums.length; cur++) {
            if(nums[cur]!=0){
                //交换dest,然后两个++
                int flag = nums[cur];
                nums[cur] = nums[dest];
                nums[dest] = flag;
                dest++;
            }
        }
        for (int num : nums) {
            System.out.print(num);
        }
    }

}
